package com.spring.menu.animation; import com.spring.menu.control.ImageButtonExtend; import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.MarginLayoutParams; import android.view.animation.AnticipateInterpolator; import android.view.animation.AnticipateOvershootInterpolator; import android.view.animation.OvershootInterpolator; import android.view.animation.TranslateAnimation; /** * �ֲ��˵����غ��������� * @Description: �ֲ��˵����غ��������� * @File: SpringAnimation.java * @Package com.spring.menu.animation * @Author Hanyonglu * @Date 2012-10-25 ����12:18:39 * @Version V1.0 */ public class SpringAnimation extends ZoomAnimation1 { private static int[] size; private static int xOffset = 210; private static int yOffset = -15; public static final int DURATION = 300; /** * ������ * @param direction * @param duration * @param view */ public SpringAnimation(Direction direction, long duration, View view) { super(direction, duration, new View[] { view }); SpringAnimation.xOffset = SpringAnimation.size[0] / 2 - 30; } /** * ��ʼ��ʾ����Ч�� * @param viewgroup * @param direction * @param size */ public static void startAnimations(ViewGroup viewgroup, ZoomAnimation1.Direction direction, int[] size) { SpringAnimation.size = size; switch (direction) { case HIDE: startShrinkAnimations(viewgroup); break; case SHOW: startEnlargeAnimations(viewgroup); break; } } /** * ��ʼ���ֲ˵� * @param viewgroup */ private static void startEnlargeAnimations(ViewGroup viewgroup) { for (int i = 0; i < viewgroup.getChildCount(); i++) { if (viewgroup.getChildAt(i) instanceof ImageButtonExtend) { ImageButtonExtend inoutimagebutton = (ImageButtonExtend) viewgroup .getChildAt(i); SpringAnimation animation = new SpringAnimation( ZoomAnimation1.Direction.HIDE, DURATION, inoutimagebutton); animation.setStartOffset((i * 200) / (-1 + viewgroup.getChildCount())); animation.setInterpolator(new OvershootInterpolator(4F)); inoutimagebutton.startAnimation(animation); } } } /** * ��ʼ���ز˵� * @param viewgroup */ private static void startShrinkAnimations(ViewGroup viewgroup) { for (int i = 0; i < viewgroup.getChildCount(); i++) { if (viewgroup.getChildAt(i) instanceof ImageButtonExtend) { ImageButtonExtend inoutimagebutton = (ImageButtonExtend) viewgroup .getChildAt(i); SpringAnimation animation = new SpringAnimation( ZoomAnimation1.Direction.SHOW, DURATION, inoutimagebutton); animation.setStartOffset((100 * ((-1 + viewgroup .getChildCount()) - i)) / (-1 + viewgroup.getChildCount())); animation.setInterpolator(new AnticipateOvershootInterpolator(2F)); inoutimagebutton.startAnimation(animation); } } } @Override protected void addShrinkAnimation(View[] views) { // TODO Auto-generated method stub MarginLayoutParams mlp = (MarginLayoutParams) views[0]. getLayoutParams(); addAnimation(new TranslateAnimation( xOffset + -mlp.leftMargin, 0F,yOffset + mlp.bottomMargin, 0F)); } @Override protected void addEnlargeAnimation(View[] views) { // TODO Auto-generated method stub MarginLayoutParams mlp = (MarginLayoutParams) views[0]. getLayoutParams(); addAnimation(new TranslateAnimation( 0F, xOffset + -mlp.leftMargin, 0F,yOffset + mlp.bottomMargin)); } }